
import adminListView from '$v/adminList'
import { addAdminRequest, adminListRequest, deleteAdminRequest ,logoutRequest} from '$a/admin'


//封装展示所有管理员的函数,在添加或删除管理员之后需要重新渲染页面
// const showAdminList = async(res) => {

// }
const showAdminList = async (res) => {
  //如果后面会有改变的变量需要用let
  let adminListResult = null
  //在访问这个地址的时候就查询管理员列表
  try {
    adminListResult = await adminListRequest()

    // console.log(adminListResult);
  } catch (e) {
    //如果有错误弹框
    alert("获取管理员列表异常:" + e.message)
    if (!e.isLogin) {
      return router.go('/login')
    }
  }
//渲染二级路由
  res.render(adminListView({
    adminList: adminListResult
  }))
}

export default async (req, res) => {

  await showAdminList(res)

  //由于showAdminList是异步函数需要等这个函数执行完了渲染完页面,后面的点击按钮才能获取,所以要加上await
  // await showAdminList(res)
  //在sme路由的回调函数汇总可以获取整个document,所以可以在这个位置操作document
  //给保存按钮绑定点击事件,添加管理员
  //在添加成功之后管理员列表是重新渲染的,重新渲染的元素没有绑定点击事件,所以重新渲染后再次点击保存是没有反应的
  //重新渲染的是二级路由,上面的数据是没有重新渲染的.所以可以通过冒泡绑定事件,让重新渲染的事件也有点击事件
  const saveAdminBtn = document.querySelector('#saveAdminBtn')
  document.onclick = async function (e) {
    //e.target.id是字符串
    if (e.target.id === 'saveAdminBtn') {
      // console.log(2);
      //获取三个表单的value
      //通过form表单的name属性获取
      //trim清除前后的空格
      const adminNameValue = document.adminForm.adminName.value.trim()
      const passwordValue = document.adminForm.password.value.trim()
      const rePasswordValue = document.adminForm.rePassword.value.trim()
      //判断三个数据不能为空
      if (!adminNameValue || !passwordValue || !rePasswordValue) {
        return alert('输入的内容不能为空')
      }
      if (passwordValue !== rePasswordValue) {
        return alert('两次输入的密码不一致')
      }
      //!!!!!!!
      try {
        //axios实例返回值 
        await addAdminRequest({  //路径???
          adminName: adminNameValue,
          password: passwordValue,
          regTime: new Date().toLocaleString()
        })
        alert('添加成功')
        //走到这一步一定是10000的状态,10001和10002拦截器帮我们包装成了失败的promise实例
        // console.log(result);
        //添加成功后关闭添加页面
        document.querySelector('#closeAdd').click()
        //清空表单
        document.adminForm.reset()

        await showAdminList(res)
      } catch (e) {
        alert("有异常" + e.message)
        // document.adminForm.reset()
        if (!e.isLogin) {
           //关闭添加页面
        document.querySelector('#closeAdd').click()
          return router.go('/login')
        }
      }
    }
    //删除管理员逻辑
    //如果当前点击的按钮是button且它的父元素是td则满足条件
    //nodeName  元素节点名称  parentName父元素节点名称  nodeType =1 元素节点类型
    // console.log(e);
    if (e.target.nodeName === 'BUTTON' && e.target.parentNode.nodeName === 'TD') {
      // console.log(1);
      const adminName = e.target.dataset.adminname
      // console.log(adminName);

      try {
        await deleteAdminRequest(adminName)
        alert('删除管理员' + adminName + '成功')
        showAdminList(res)
        //删除成功,重新渲染视图
      } catch (e) {
        alert('删除管理员失败' + e.message)
        if (!e.isLogin) {
          
          return router.go('/login')
        }
      }
    }

    //退出登录逻辑

  }

}